import javax.sound.midi.Soundbank;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Test9_ReInterrupted extends Thread{
    public static void main(String[] args) throws InterruptedException {
        //当前线程main
        String threadName=Thread.currentThread().getName();
        Test9_ReInterrupted reInterrupted=new Test9_ReInterrupted();//创建线程
        System.out.println(printDate()+threadName+"线程启动");
        //启动新线程
        reInterrupted.start();
        //main主线程休眠3s
        Thread.sleep(3000);
        System.out.println(printDate()+threadName+"发出中断信号，设置子线程中断");
        //对新线程设置线程中断
        reInterrupted.interrupt();
        //主线程休眠3秒
        //Thread.sleep(3000);
        System.out.println(printDate()+threadName+"运行结束");


    }
    private static String printDate(){
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return sdf.format(new Date())+"";

    }

    @Override
    public void run() {
        //当前线程
        String threadName=Thread.currentThread().getName();
        int i=0;
        //for循环等待线程中断 只要当前线程不是中断，则退出当前进程
        while(!Thread.currentThread().isInterrupted()){
            System.out.println(printDate()+threadName+"线程正在执行"+(++i)+"次");
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                System.out.println(printDate()+threadName+"线程正在执行，收到中断信号，进入catch快进行处理");
                //检测线程是否中断
                System.out.println(printDate()+threadName+this.isInterrupted());//false
                //如果需要维护中断状态，则需要重新设置中断状态
                //TODO：如果不需要，则不用调用，如果调用 interrput（）的话，则当前线程的状态为中断，这个while退出循环，程序结束
                Thread.currentThread().interrupt();//true//TODO:如果注释这一句的话，w则中断不起作用，while循环仍会继续，想象一下，这样对偶然出现的一下些小问题并不会让任务结束吧
            }
        }
        System.out.println(printDate()+threadName+"线程是否中断："+this.isInterrupted());
        System.out.println(printDate()+threadName+"线程退出");
    }
}
